﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Configuration; // Configuration Manager
using System.Web; // HttpContext
using System.Data.Objects; // MergeOOptin

namespace LearningCompany_DAO
{
    public partial class ContexteDAO
    {
        static ContexteDAO()
        {
            ContexteDAO.ListeContexteDonnees = new Dictionary<string, LearningCompanyEntities>();
        }

        private static Dictionary<string, LearningCompanyEntities> _ListeContexteDonnees;

        private static Dictionary<string, LearningCompanyEntities> ListeContexteDonnees
        {
            get { return ContexteDAO._ListeContexteDonnees; }
            set { ContexteDAO._ListeContexteDonnees = value; }
        }

        private static LearningCompanyEntities CreerContexteDonnees()
        {
            // Création du contexte de données
            LearningCompanyEntities oContexteDonnees = new LearningCompanyEntities(ConfigurationManager.ConnectionStrings["CS_LearningCompany"].ConnectionString);

            // Définition des règles de mise à jour des données dans le contexte de données
            oContexteDonnees.SecteurActivite.MergeOption = MergeOption.OverwriteChanges;

            // Retour
            return oContexteDonnees;
        }

        internal static LearningCompanyEntities ContexteDonnees
        {
            get
            {
                LearningCompanyEntities oContexteDonnees = null;

                if (HttpContext.Current != null && HttpContext.Current.Server != null)
                {
                    // Application Client Web
                    if (ListeContexteDonnees.ContainsKey(HttpContext.Current.Session.SessionID))
                    {
                        oContexteDonnees = ListeContexteDonnees[HttpContext.Current.Session.SessionID];
                    }
                    else
                    {
                        oContexteDonnees = ContexteDAO.CreerContexteDonnees();
                        ListeContexteDonnees.Add(HttpContext.Current.Session.SessionID, oContexteDonnees);
                    }
                }
                else
                {
                    // Application Windows
                    if (ListeContexteDonnees.ContainsKey("AppliWin"))
                    {
                        oContexteDonnees = ListeContexteDonnees["AppliWin"];
                    }
                    else
                    {
                        oContexteDonnees = ContexteDAO.CreerContexteDonnees();
                        ListeContexteDonnees.Add("AppliWin", oContexteDonnees);
                    }
                }

                return oContexteDonnees;
            }
        }

        public static void SupprimerContexte(string aIdContexteDonnees)
        {
            if (ListeContexteDonnees.ContainsKey(aIdContexteDonnees))
            {
                ListeContexteDonnees.Remove(aIdContexteDonnees);
            }
        }

        public static void Enregistrer()
        {
            ContexteDAO.ContexteDonnees.SaveChanges();
        }
    }


}
